import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:8000/api', // Django后端地址
  timeout: 120000, // 增加超时时间到2分钟，因为AI生成需要时间
  // timeout: 60000, // 增加超时时间到60秒
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    // 调试信息
    console.log('请求拦截器 - URL:', config.url)
    console.log('请求拦截器 - 方法:', config.method)
    console.log('请求拦截器 - 数据:', config.data)
    console.log('请求拦截器 - 头部:', config.headers)

    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    if (error.response) {
      const { status, data } = error.response
      switch (status) {
        case 401:
          ElMessage.error(data.message || '未登录或登录已过期')
          // 清除本地存储的token和retoken
          localStorage.removeItem('token')
          localStorage.removeItem('retoken')
          localStorage.removeItem('userInfo')
          // 跳转到登录页
          window.location.href = '/login'
          break
        case 400:
          ElMessage.error(data.message || '请求参数错误')
          break
        case 500:
          ElMessage.error(data.message || '服务器错误')
          break
        default:
          ElMessage.error(data.message || '请求失败')
      }
    } else {
      ElMessage.error('网络错误，请检查网络连接')
    }
    return Promise.reject(error)
  }
)

// API接口定义
export const authAPI = {
  // 获取图片验证码
  getImageCode: (uuid) => {
    return `${api.defaults.baseURL}/imagecode/?uuid=${uuid}`
  },
  
  // 发送短信验证码
  sendSMS: (data) => {
    return api.post('/sendsms/', data)
  },
  
  // 登录
  login: (data) => {
    return api.post('/login/', data)
  },
  
  // 退出登录
  logout: async () => {
    const response = await api.post('/logout/')
    // 退出登录时清除本地存储
    localStorage.removeItem('token')
    localStorage.removeItem('retoken')
    localStorage.removeItem('userInfo')
    return response
  },
  
  // 获取用户信息
  getUserInfo: () => {
    return api.get('/userinfo/')
  },
  
  // 刷新token
  refreshToken: (retoken) => {
    return api.post('/refresh-token/', {}, {
      headers: {
        'Authorization': `Bearer ${retoken}`
      }
    })
  },
  
  // 统一的OAuth登录接口
  oauthLogin: (platform) => {
    return api.get(`/oauth/url/?type=${platform}`)
  },

  // QQ登录 - 使用统一OAuth接口
  qqLogin: () => {
    return api.get('/oauth/url/?type=qq')
  },
  
  // 微信登录 - 使用统一OAuth接口
  wechatLogin: () => {
    return api.get('/oauth/url/?type=wechat')
  },
  
  // Gitee登录 - 使用统一OAuth接口
  giteeLogin: () => {
    return api.get('/oauth/url/?type=gitee')
  },

  // 钉钉登录 - 使用统一OAuth接口
  dingTalkLogin: () => {
    return api.get('/oauth/url/?type=dingding')
  },

  // 统一的OAuth回调处理
  oauthCallback: (params) => {
    return api.get('/oauth/callback/', { params })
  },
  
  // 兼容性回调接口
  giteeCallback: (code) => {
    return api.get(`/gitee_callback/?code=${code}`)
  },


  // 微信回调 - 处理微信登录回调
  wechatCallback: (data) => {
    return api.get('/wechat-callback/', { params: data })
  },

  qqCallback: (data) => {
    return api.get('/auth/qq/callback/', { params: data })
  },

  // 绑定手机号
  bindPhone: (data) => {
    return api.post('/auth/bind-phone/', data)
  },

  // OAuth授权URL生成 - 使用工厂模式
  getOAuthUrl: (platform) => {
    return api.get('/oauth/url/', { params: { type: platform } })
  },

  // 钉钉回调 - 处理钉钉登录回调
  dingTalkCallback: (data) => {
    return api.get('/dingdingCallback/', { params: data })
  },



  // 获取身份证认证状态
  getIdCardStatus: () => {
    // 直接使用完整URL，因为verify路由不在/api前缀下
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.get('http://localhost:8000/verify/status/', { headers })
  },

  // 获取身份证验证七牛云token
  getIdCardQiniuToken: () => {
    // 直接使用完整URL，不依赖baseURL
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.get('http://localhost:8000/verify/qutoken/', { headers })
  },

  // 识别身份证
  recognizeIdCard: (imgurl) => {
    // 直接使用完整URL，不依赖baseURL
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.post('http://localhost:8000/verify/idcard/', {
      picurl: imgurl
    }, { headers })
  },

  // 提交身份证认证
  submitIdCardVerification: (data) => {
    // 直接使用完整URL，不依赖baseURL
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.post('http://localhost:8000/verify/submit/', data, { headers })
  },
  
  // 查询身份证识别处理结果
  checkIdCardResult: (picurl) => {
    // 直接使用完整URL，不依赖baseURL
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.get(`http://localhost:8000/verify/checkidcardmes/?picurl=${encodeURIComponent(picurl)}`, { headers })
  }
}

// 用户资料相关API接口
export const userAPI = {
  // 获取用户资料
  getUserProfile: () => {
    return api.get('/user/profile/')
  },

  // 更新用户资料
  updateUserProfile: (data) => {
    console.log('[API] 调用updateUserProfile，数据:', data)
    console.log('[API] 请求URL: /user/profile/update/')
    console.log('[API] 请求方法: POST')
    return api.post('/user/profile/update/', data)
  },

  // 获取七牛云上传token
  getQiniuToken: () => {
    return api.get('/user/qiniu-token/')
  },

  // 获取七牛云下载token
  getQiniuDownloadToken: (key) => {
    return api.get(`/user/qiniu-download-token/?key=${key}`)
  }
}

// AI相关API接口
export const aiAPI = {
  // 生成AI勋章（完整流程）
  generateMedal: (data) => {
    return api.post('/ai/generate-medal/', data)
  },

  // 提交AI作画任务
  submitTask: (data) => {
    return api.post('/ai/submit-task/', data)
  },

  // 获取AI作画结果
  getResult: (data) => {
    return api.post('/ai/get-result/', data)
  }
}

// 训练计划相关API接口
export const workoutAPI = {
  // 生成个性化训练计划
  generateWorkoutPlan: (data) => {
    // 直接使用完整URL，因为report路由不在/api前缀下
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.post('http://localhost:8000/report/general_agent/', data, {headers})
  },
  
  // 获取用户最近一次AI训练计划
  getUserLatestPlan: () => {
    const token = localStorage.getItem('token')
    const headers = {}
    if (token) {
      headers['Authorization'] = `Bearer ${token}`
    }
    return axios.get('http://localhost:8000/report/user-workout-plan/', {headers})
  }
}

// 饮食计划相关API
export const dietAPI = {
  // 获取用户档案信息
  getUserProfile: () => {
    return api.get('/diet/user-profile/')
  },

  // 更新用户档案信息
  updateUserProfile: (data) => {
    return api.put('/diet/user-profile/', data)
  },

  // 生成饮食计划
  generateDietPlan: (data) => {
    return api.post('/diet/generate-plan/', data)
  },

  // 获取用户饮食计划列表
  getUserMealPlans: () => {
    return api.get('/diet/my-plans/')
  },

  // 获取饮食计划详情
  getMealPlanDetail: (planId) => {
    return api.get(`/diet/plan-detail/${planId}/`)
  }
}

export default api